<?php

namespace Payment\Common\YSpay\Data\Charge;

use Payment\Common\YSpay\Data\YSBaseData;
use Payment\Common\PayException;
use Payment\Utils\ArrayUtil;

class ScanChargeData extends YSBaseData{

	/**
	 * 构建用于支付的签名相关数据
	 *
	 * @return void
	 */
	protected function buildData(){
		// TODO: Implement buildData() method.
        $this->certainSignData = [
            'channelid'    => $this->channelid,               //渠道编号
            'opt'          => $this->opt ?? "scanPay",       //操作类型（“scanPay”）
            'merid'        => $this->merid,                   //商戶编号
            'termid'       => $this->termid,                  //终端编号
            'tradetrace'   => $this->tradetrace,              //商户订单号（控制在 50 位长度以内，确保在请求接口的系统中全局 唯一；可以包含数字与字母；不能包含其他特殊字符）
            'tradeamt'     => $this->tradeamt,                //交易金额（单位：分）
            'authcode'     => $this->authcode,                //扫码支付授权码，设备读取用户微信、支付宝、银联钱包中的条码或 者二维码信息
            'body'         => $this->body ?? "乐店云支付",      //商品或支付单简要描述
        ];

		$signData = array_merge($this->certainSignData, []);
		if(isset($this->maintradetype)){                      //刷脸类型填写（faceScanPay）
			$signData['maintradetype'] = $this->maintradetype;
		}
		if(isset($this->instalment)){                          //支付宝花呗分期
			$signData['instalment'] = $this->instalment;
		}
        if(isset($this->handingfee)){
            $signData['handingfee'] = $this->handingfee;       //手续费（以分为单位,第一位是 D 或 C，表示借、贷）
        }
        if(isset($this->version)){
            $signData['version'] = $this->version;             //填写的值为 2 时，交易成功后返回优惠信息
        }
        if(isset($this->identity)){
            $signData['identity'] = $this->identity;           //JSON 格式指定付款人信息（格式繁琐，不推荐使用）
        }
        if(isset($this->patnersettleflag)){
            $signData['patnersettleflag'] = $this->patnersettleflag;//资金结算秒到标识（取值：1、2） 1：本次交易正常T1结算，2：本次交易秒到（前提条件：代理需开通白名单、商户需要开通秒到功能）
        }
		// 移除数组中的空值
		$this->retData = ArrayUtil::paraFilter($signData);
	}

	protected function checkDataParam(){
		parent::checkDataParam(); // TODO: Change the autogenerated stub
		if(empty($this->notifyUrl)){
			throw new PayException('支付通知地址不能为空');
		}
	}
}
